package com.imooc.security.demo.validator;

import com.imooc.security.demo.annotation.MyConstraint;
import com.imooc.security.demo.service.HelloService;
import org.springframework.beans.factory.annotation.Autowired;

import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;

/**
 * 自定义约束验证器。这里不需要@Component，会自动注入当前类到容器中
 * ConstraintValidator接口定义了在实现中设置的两个类型参数。第一个指定要验证的注释类型（MyConstraint），第二个指定验证器可以处理的元素的类型（String）
 * @author JackYang
 */
public class MyConstraintValidator implements ConstraintValidator<MyConstraint,String> {
    
    @Autowired
    private HelloService helloService;
    
    /**
     * initialize()方法使您可以访问已验证约束的属性值
     */
    @Override
    public void initialize(MyConstraint constraintAnnotation) {
        System.out.println("自定义ConstraintValidator初始化...init...");
        System.out.println(constraintAnnotation.annotationType());
    }
    
    /**
     * 实际的验证逻辑
     */
    @Override
    public boolean isValid(String value, ConstraintValidatorContext context) {
        System.out.println("自定义ConstraintValidator开始校验值,isValid...:"+value);
        helloService.greeting();
        //false校验失败
        return false;
    }
}
